﻿/**
 * Name             :   RegistryDb 
 * Namespace        :   OSMOZE.Core.DataProvider.DataSource
 * Base Classe      :   System.Object
 * Type             :   Classe
 * Author           :   Hamza Saii
 * Creation         :   17/09/2014
 * Updated          :   17/09/2014
 * Licence          :   Public
 * Comment          :   Cette classe permet d'enregistrer les paramètres de base dans la base de
 *                      registre. En effet, et à travers la reflexion, la classe parcours la liste 
 *                      des propriétés des la classe, et à travers les annociation, créer les éléments 
 *                      dans la base de registre, notez que les information seront enregistrées sous format
 *                      binaire crypté pour des raisons de sécurité
 * */

namespace HAS.Core.Registry.DataSource
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Reflection;
    using System.Text;
    
    /// <summary>
    /// Permet d'enregistrer et de consulter les informations de l'utilisateur courant
    /// et de la machine actuelle depuis/vers la base de registre
    /// </summary>
    public abstract class RegistryDb 
    {
        /// <summary>
        /// Représente la liste des paramètres valide à ajouter
        /// ou à recupérer depuis la base de registre
        /// </summary>
        protected List<string> RegistryParamNames { get; set; }


        /// <summary>
        /// Constructuer de la classe
        /// </summary>
        protected RegistryDb() { }

        /// <summary>
        /// Constructuer de la classe
        /// </summary>
        /// <param name="model">un pointeure vers le modèle de données
        /// qui contient les informations à enregistrer</param>
        /// <param name="registryParamNames">Liste des paramètres valide à enregistrer</param>
        public RegistryDb(List<string> registryParamNames)
        {
            RegistryParamNames = registryParamNames;
        }

        /// <summary>
        /// Permet d'ajouter un paramètres dans la liste à enregistrer dans la base 
        /// de registre s'il n'existe pas dans la liste
        /// </summary>
        /// <param name="paramName">le nom du paramètres à enregistrer</param>
        protected void AddParam(string paramName)
        {
            //Il faut que les paramètres soient valident
            if (RegistryParamNames == null)
                return;

            paramName = paramName.ToLower();
            if (!RegistryParamNames.Contains(paramName))
                RegistryParamNames.Add(paramName);
        }

        /// <summary>
        /// Permet de supprimer un des paramètres à enregistrer dans la 
        /// base de registre
        /// </summary>
        /// <param name="paramName">Le nom de paramètres à supprimer</param>
        /// <returns>true si le paramètres existe sinon false</returns>
        protected bool RemoveParam(string paramName)
        {
            //Il faut que les paramètres soient valident
            if (RegistryParamNames == null)
                return false;

            paramName = paramName.ToLower();
            if (!RegistryParamNames.Contains(paramName))
            {
                RegistryParamNames.Remove(paramName);
                return true;
            }
            return false;
        }

      
    }
}
